
#include "lv_ui_home.h"

static void event_handler_stm32_demo_tools_clock(lv_obj_t * obj, lv_event_t event);			    // 打开时钟应用事件处理函数
static void event_handler_stm32_demo_tools_calc(lv_obj_t * obj, lv_event_t event);      		// 打开计算器应用事件处理函数
static void event_handler_stm32_demo_tools_settings(lv_obj_t * obj, lv_event_t event);			// 打开系统设置应用事件处理函数
static void event_handler_stm32_demo_game_snake(lv_obj_t * obj, lv_event_t event);			    // 打开贪吃蛇游戏应用事件处理函数



void lv_ui_home_init(uint32_t delay);


LV_IMG_DECLARE(img_lv_100ask_icon_data);		// 03
LV_IMG_DECLARE(img_lv_100ask_icon_calc);		// 10
LV_IMG_DECLARE(img_lv_100ask_icon_snake);		// 07
LV_IMG_DECLARE(img_lv_100ask_icon_setting);	    // 02



void lv_ui_home_demo(uint32_t delay)
{
	

	lv_obj_clean(lv_scr_act()); 					// 确保屏幕无残留
    lv_obj_t * scr = lv_obj_create(NULL, NULL);
    lv_scr_load(scr);

	lv_my_boot_animation(delay);

	lv_ui_home_init(delay);
}


void lv_ui_home_init(uint32_t delay)
{
	lv_obj_t * label_app_name;  // app图标下方的文字
	lv_obj_t * obj_menu_item;	// 用于遍历初始化app图标的指针

	uint8_t row_count = 0; 		// 行
	uint8_t col_count = 0; 		// 列
	
    // 列
    lv_coord_t col_space = ((((LV_100ASK_BOTTOM_MENU_W - (LV_100ASK_BOTTOM_MENU_ITEM_SIZE * LV_100ASK_BOTTOM_MENU_ITEM_COUNT)) / 5) * (col_count + 1)) + (LV_100ASK_BOTTOM_MENU_ITEM_SIZE * col_count));
    
	// 行
    lv_coord_t row_space = ((((LV_100ASK_BOTTOM_MENU_W - (LV_100ASK_BOTTOM_MENU_ITEM_SIZE * LV_100ASK_BOTTOM_MENU_ITEM_COUNT)) / 5) * (row_count + 1)) + (LV_100ASK_BOTTOM_MENU_ITEM_SIZE * row_count));

	/***************** 1 时钟 **********************/
	obj_menu_item = lv_img_create(lv_scr_act(), NULL);
    label_app_name = lv_label_create(lv_scr_act(), NULL);

    lv_obj_set_click(obj_menu_item, 1);            // 允许点击
    lv_img_set_src(obj_menu_item, &img_lv_100ask_icon_data);    // 使用数组文件
    //lv_obj_set_drag(obj_menu_item, true);        // 启用拖动
    lv_obj_align(obj_menu_item, NULL, LV_ALIGN_IN_TOP_LEFT, col_space, row_space);
    lv_obj_fade_in(obj_menu_item, 0 , delay);
    lv_obj_set_event_cb(obj_menu_item, event_handler_stm32_demo_tools_clock);    /* 分配事件回调处理函数 */
	
	/* 创建 app name 标签 */
    lv_obj_set_style_local_text_font(label_app_name, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, &lv_font_montserrat_10);  	// 设置字号
    lv_label_set_text(label_app_name, "time");
    lv_obj_align(label_app_name, obj_menu_item, LV_ALIGN_OUT_BOTTOM_MID, 0, 0);
    lv_obj_fade_in(label_app_name, 0 , delay);

	col_count++;
	col_space = ((((LV_100ASK_BOTTOM_MENU_W - (LV_100ASK_BOTTOM_MENU_ITEM_SIZE * LV_100ASK_BOTTOM_MENU_ITEM_COUNT)) / 5) * (col_count + 1)) + (LV_100ASK_BOTTOM_MENU_ITEM_SIZE * col_count));

	/***************** 2 设置 **********************/
	obj_menu_item = lv_img_create(lv_scr_act(), NULL);
    label_app_name = lv_label_create(lv_scr_act(), NULL);

    lv_obj_set_click(obj_menu_item, 1);            // 允许点击
    lv_img_set_src(obj_menu_item, &img_lv_100ask_icon_setting);    // 使用数组文件
    //lv_obj_set_drag(obj_menu_item, true);        // 启用拖动
    lv_obj_align(obj_menu_item, NULL, LV_ALIGN_IN_TOP_LEFT, col_space, row_space);
    lv_obj_fade_in(obj_menu_item, 0 , delay);
    lv_obj_set_event_cb(obj_menu_item, event_handler_stm32_demo_tools_settings);    /* 分配事件回调处理函数 */
	
	/* 创建 app name 标签 */
    lv_obj_set_style_local_text_font(label_app_name, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, &lv_font_montserrat_10);  	// 设置字号
    lv_label_set_text(label_app_name, "settings");
    lv_obj_align(label_app_name, obj_menu_item, LV_ALIGN_OUT_BOTTOM_MID, 0, 0);
    lv_obj_fade_in(label_app_name, 0 , delay);
	
	col_count++;
	col_space = ((((LV_100ASK_BOTTOM_MENU_W - (LV_100ASK_BOTTOM_MENU_ITEM_SIZE * LV_100ASK_BOTTOM_MENU_ITEM_COUNT)) / 5) * (col_count + 1)) + (LV_100ASK_BOTTOM_MENU_ITEM_SIZE * col_count));

	/***************** 3 计算器 **********************/
	obj_menu_item = lv_img_create(lv_scr_act(), NULL);
    label_app_name = lv_label_create(lv_scr_act(), NULL);

    lv_obj_set_click(obj_menu_item, 1);            // 允许点击
    lv_img_set_src(obj_menu_item, &img_lv_100ask_icon_calc);    // 使用数组文件
    //lv_obj_set_drag(obj_menu_item, true);        // 启用拖动
    lv_obj_align(obj_menu_item, NULL, LV_ALIGN_IN_TOP_LEFT, col_space, row_space);
    lv_obj_fade_in(obj_menu_item, 0 , delay);
    lv_obj_set_event_cb(obj_menu_item, event_handler_stm32_demo_tools_calc);    /* 分配事件回调处理函数 */
	
	/* 创建 app name 标签 */
    lv_obj_set_style_local_text_font(label_app_name, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, &lv_font_montserrat_10);  	// 设置字号
    lv_label_set_text(label_app_name, "calc");
    lv_obj_align(label_app_name, obj_menu_item, LV_ALIGN_OUT_BOTTOM_MID, 0, 0);
    lv_obj_fade_in(label_app_name, 0 , delay);

	
	col_count++;
	col_space = ((((LV_100ASK_BOTTOM_MENU_W - (LV_100ASK_BOTTOM_MENU_ITEM_SIZE * LV_100ASK_BOTTOM_MENU_ITEM_COUNT)) / 5) * (col_count + 1)) + (LV_100ASK_BOTTOM_MENU_ITEM_SIZE * col_count));

	/***************** 4 游戏 **********************/
	obj_menu_item = lv_img_create(lv_scr_act(), NULL);
    label_app_name = lv_label_create(lv_scr_act(), NULL);

    lv_obj_set_click(obj_menu_item, 1);            // 允许点击
    lv_img_set_src(obj_menu_item, &img_lv_100ask_icon_snake);    // 使用数组文件
    //lv_obj_set_drag(obj_menu_item, true);        // 启用拖动
    lv_obj_align(obj_menu_item, NULL, LV_ALIGN_IN_TOP_LEFT, col_space, row_space);
    lv_obj_fade_in(obj_menu_item, 0 , delay);
    lv_obj_set_event_cb(obj_menu_item, event_handler_stm32_demo_game_snake);    /* 分配事件回调处理函数 */
	
	/* 创建 app name 标签 */
    lv_obj_set_style_local_text_font(label_app_name, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, &lv_font_montserrat_10);  	// 设置字号
    lv_label_set_text(label_app_name, "snake");
    lv_obj_align(label_app_name, obj_menu_item, LV_ALIGN_OUT_BOTTOM_MID, 0, 0);
    lv_obj_fade_in(label_app_name, 0 , delay);
	
    /* 创建底部导航栏展示区域 */
    lv_obj_t * obj_bottom_menu = lv_obj_create(lv_scr_act(), NULL);
    lv_obj_set_size(obj_bottom_menu, LV_100ASK_BOTTOM_MENU_W, LV_100ASK_BOTTOM_MENU_H);                                  // 设置大小
    lv_obj_set_style_local_bg_opa(obj_bottom_menu, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_70);                       // 设置背景透明度
    lv_obj_set_style_local_radius(obj_bottom_menu, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, 0);                               // 设置圆角
    lv_obj_set_style_local_bg_color(obj_bottom_menu, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_100ASK_BOTTOM_MENU_COLOR);   // 设置颜色
	lv_obj_align(obj_bottom_menu, NULL, LV_ALIGN_IN_BOTTOM_MID, 0, 0);
    lv_obj_fade_in(obj_bottom_menu, 0 , delay);
	
	col_count++;
	col_space = ((((LV_100ASK_BOTTOM_MENU_W - (LV_100ASK_BOTTOM_MENU_ITEM_SIZE * LV_100ASK_BOTTOM_MENU_ITEM_COUNT)) / 5) * (col_count + 1)) + (LV_100ASK_BOTTOM_MENU_ITEM_SIZE * col_count));

	
    /* 创建底部导航栏内的菜单 */
    lv_obj_t * obj_bottom_menu_item;

	//========================================================
    obj_bottom_menu_item = lv_img_create(obj_bottom_menu, NULL);
    lv_obj_set_click(obj_bottom_menu_item, 1);            // 允许点击
    lv_img_set_src(obj_bottom_menu_item, &img_lv_100ask_icon_data);    // 使用数组文件
    //lv_obj_set_drag(obj_bottom_menu_item, true);        // 启用拖动
    lv_obj_align(obj_bottom_menu_item, NULL, LV_ALIGN_IN_LEFT_MID, ((((LV_100ASK_BOTTOM_MENU_W - (LV_100ASK_BOTTOM_MENU_ITEM_SIZE * LV_100ASK_BOTTOM_MENU_ITEM_COUNT)) / 5) * (0 + 1))\
                                                                 + (LV_100ASK_BOTTOM_MENU_ITEM_SIZE * 0)), 0);
    lv_obj_fade_in(obj_bottom_menu_item, 0 , delay);
    lv_obj_set_event_cb(obj_bottom_menu_item, event_handler_stm32_demo_tools_clock);    /* 分配事件回调处理函数 */


	//========================================================
    obj_bottom_menu_item = lv_img_create(obj_bottom_menu, NULL);
    lv_obj_set_click(obj_bottom_menu_item, 1);            // 允许点击
    lv_img_set_src(obj_bottom_menu_item, &img_lv_100ask_icon_setting);    // 使用数组文件
    //lv_obj_set_drag(obj_bottom_menu_item, true);        // 启用拖动
    lv_obj_align(obj_bottom_menu_item, NULL, LV_ALIGN_IN_LEFT_MID, ((((LV_100ASK_BOTTOM_MENU_W - (LV_100ASK_BOTTOM_MENU_ITEM_SIZE * LV_100ASK_BOTTOM_MENU_ITEM_COUNT)) / 5) * (1 + 1))\
                                                                 + (LV_100ASK_BOTTOM_MENU_ITEM_SIZE * 1)), 0);
    lv_obj_fade_in(obj_bottom_menu_item, 0 , delay);
    lv_obj_set_event_cb(obj_bottom_menu_item, event_handler_stm32_demo_tools_settings);    /* 分配事件回调处理函数 */


	//========================================================
    obj_bottom_menu_item = lv_img_create(obj_bottom_menu, NULL);
    lv_obj_set_click(obj_bottom_menu_item, 1);            // 允许点击
    lv_img_set_src(obj_bottom_menu_item, &img_lv_100ask_icon_calc);    // 使用数组文件
    //lv_obj_set_drag(obj_bottom_menu_item, true);        // 启用拖动
    lv_obj_align(obj_bottom_menu_item, NULL, LV_ALIGN_IN_LEFT_MID, ((((LV_100ASK_BOTTOM_MENU_W - (LV_100ASK_BOTTOM_MENU_ITEM_SIZE * LV_100ASK_BOTTOM_MENU_ITEM_COUNT)) / 5) * (2 + 1))\
                                                                 + (LV_100ASK_BOTTOM_MENU_ITEM_SIZE * 2)), 0);
    lv_obj_fade_in(obj_bottom_menu_item, 0 , delay);
    lv_obj_set_event_cb(obj_bottom_menu_item, event_handler_stm32_demo_tools_calc);    /* 分配事件回调处理函数 */


	//========================================================
    obj_bottom_menu_item = lv_img_create(obj_bottom_menu, NULL);
    lv_obj_set_click(obj_bottom_menu_item, 1);            // 允许点击
    lv_img_set_src(obj_bottom_menu_item, &img_lv_100ask_icon_snake);    // 使用数组文件
    //lv_obj_set_drag(obj_bottom_menu_item, true);        // 启用拖动
    lv_obj_align(obj_bottom_menu_item, NULL, LV_ALIGN_IN_LEFT_MID, ((((LV_100ASK_BOTTOM_MENU_W - (LV_100ASK_BOTTOM_MENU_ITEM_SIZE * LV_100ASK_BOTTOM_MENU_ITEM_COUNT)) / 5) * (3 + 1))\
                                                                 + (LV_100ASK_BOTTOM_MENU_ITEM_SIZE * 3)), 0);
    lv_obj_fade_in(obj_bottom_menu_item, 0 , delay);
    lv_obj_set_event_cb(obj_bottom_menu_item, event_handler_stm32_demo_game_snake);    /* 分配事件回调处理函数 */
}



/**********************************************************************
 * 函数名称： event_handler_stm32_demo_tools_clock
 * 功能描述： 打开时钟
 * 输入参数： 触发事件的对象(图标)
 * 输入参数： 事件触发的事件类型
 * 输出参数： 无
 * 返 回 值： 无
 * 修改日期              版本号      修改人	      修改内容
 * ---------------------------------------------------------------------
 * 2020/11/11	     V1.0	  YobeZhou    创建
 ***********************************************************************/
static void event_handler_stm32_demo_tools_clock(lv_obj_t * obj, lv_event_t event)
{
    if(event == LV_EVENT_CLICKED)
    {
    	#if 1
        lv_my_stm32_tool_clock();
		#endif
    }
}


/**********************************************************************
 * 函数名称： event_handler_stm32_demo_tools_calc
 * 功能描述： 打开计算器
 * 输入参数： 触发事件的对象(图标)
 * 输入参数： 事件触发的事件类型
 * 输出参数： 无
 * 返 回 值： 无
 * 修改日期              版本号      修改人	      修改内容
 * ---------------------------------------------------------------------
 * 2020/11/11	     V1.0	  YobeZhou    创建
 ***********************************************************************/
static void event_handler_stm32_demo_tools_calc(lv_obj_t * obj, lv_event_t event)
{
    if(event == LV_EVENT_CLICKED)
    {
        lv_100ask_stm32_tool_calc();
    }
}

/**********************************************************************
 * 函数名称： event_handler_stm32_demo_tools_settings
 * 功能描述： 打开系统设置
 * 输入参数： 触发事件的对象(图标)
 * 输入参数： 事件触发的事件类型
 * 输出参数： 无
 * 返 回 值： 无
 * 修改日期              版本号      修改人	      修改内容
 * ---------------------------------------------------------------------
 * 2020/11/11	     V1.0	  YobeZhou    创建
 ***********************************************************************/
static void event_handler_stm32_demo_tools_settings(lv_obj_t * obj, lv_event_t event)
{
    if(event == LV_EVENT_CLICKED)
    {
        lv_100ask_stm32_tool_setting();
    }
}

/**********************************************************************
 * 函数名称： event_handler_stm32_demo_tools_snake
 * 功能描述： 打开贪吃蛇游戏
 * 输入参数： 触发事件的对象(图标)
 * 输入参数： 事件触发的事件类型
 * 输出参数： 无
 * 返 回 值： 无
 * 修改日期              版本号      修改人	      修改内容
 * ---------------------------------------------------------------------
 * 2020/11/11	     V1.0	  YobeZhou    创建
 ***********************************************************************/
static void event_handler_stm32_demo_game_snake(lv_obj_t * obj, lv_event_t event)
{
    if(event == LV_EVENT_CLICKED)
    {
        lv_100ask_stm32_game_snake();
    }
}


/**********************************************************************
 * 函数名称： add_title
 * 功能描述： 给指定对象添加标题
 * 输入参数： 需要添加标题的对象
 * 输入参数： 标题内容
 * 输出参数： 无
 * 返 回 值： 无
 * 修改日期              版本号      修改人	      修改内容
 * ---------------------------------------------------------------------
 * 2020/11/11	     V1.0	  YobeZhou    创建
 ***********************************************************************/
lv_obj_t * add_title(lv_obj_t * obj, const char * txt)
{
    // 添加标题
	lv_obj_t * title = lv_label_create(obj, NULL);
	lv_obj_set_style_local_text_color(title, LV_OBJ_PART_MAIN, LV_STATE_PRESSED, LV_COLOR_WHITE);
	lv_obj_set_style_local_text_font(title, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, &lv_font_montserrat_22);
    lv_label_set_text(title, txt);
    lv_obj_align(title, NULL, LV_ALIGN_IN_TOP_MID, 0,
            LV_100SK_STM32F103_DEMO_TITLE_PAD);
    return title;
}

 
/**********************************************************************
 * 函数名称： add_back
 * 功能描述： 添加返回按钮
 * 输入参数： 需要添加返回按钮的对象
 * 输入参数： 需要分配的按钮事件处理函数，NULL为不需要事件处理函数
 * 输出参数： 无
 * 返 回 值： 无
 * 修改日期              版本号      修改人	      修改内容
 * ---------------------------------------------------------------------
 * 2020/11/11	     V1.0	  YobeZhou    创建
 ***********************************************************************/
void add_back(lv_obj_t * obj, lv_event_cb_t event_cb)
{
	//返回按钮
    lv_obj_t * btn = lv_obj_create(obj, NULL);															// 创建obj对象
	lv_obj_set_click(btn, true);																		// 启用点击
	lv_obj_set_style_local_bg_opa(btn, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_0); 					// 设置色彩透明度
	lv_obj_set_style_local_border_opa(btn, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_0);  				// 边框透明度
	lv_obj_set_style_local_value_color(btn, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GREEN);		// 设置数值颜色(默认状态)
	lv_obj_set_style_local_value_color(btn, LV_OBJ_PART_MAIN, LV_STATE_PRESSED, LV_COLOR_GRAY);			// 设置数值颜色(按下状态)
	lv_obj_set_style_local_value_str(btn, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_SYMBOL_LEFT);			// 设置数值字符(默认状态)
	lv_obj_set_style_local_value_font(btn, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, &lv_font_montserrat_22);	// 设置数值字体(默认状态)
    lv_obj_set_size(btn, LV_100SK_STM32F103_DEMO_BACK_W, LV_100SK_STM32F103_DEMO_BACK_H);				// 设置对象大小(宽、高)
    lv_obj_set_pos(btn, LV_100SK_STM32F103_DEMO_BACK_PAD, LV_100SK_STM32F103_DEMO_BACK_PAD);			// 设置对象位置(x、y)
    lv_obj_set_event_cb(btn, event_cb);																	// 分配回调处理函数
}

